<?php

require_once "EntidadBase.php";

class Comentario extends EntidadBase implements JsonSerializable
{
	private $IdAutor;
	private $NombreUsuarioAutor;
	private $IdEvento;
	private $fecha;
	private $texto;
	private $url;
	private $contmegusta;
	private $FechaSisAlta;
	
	// lectura y escritura de propiedades
	public function GetIdAutor()
	{
		return $this->IdAutor;
	}
	
	public function SetIdAutor($IdAutor)
	{
		if(!isset($IdAutor) || empty($IdAutor))
		{
			throw new Exception('No se esta generando el id del creador');
		}
		if(!is_int($IdAutor)|| $IdAutor <= 0)
		{
			throw new Exception('El id debe ser un numero entero mayor que 0.');
		}
	
		$this->IdAutor = $IdAutor;
	}
	
	public function GetNombreUsuarioAutor()
	{
		return $this->NombreUsuarioAutor;
	}
	
	public function SetNombreUsuarioAutor($nombreusuario)
	{
		if(!isset($nombreusuario) || empty($nombreusuario))
		{
			throw new Exception('El alias de usuario no puede ser nulo o vacio.');
		}
	
		if(!is_string($nombreusuario) || strlen($nombreusuario) <= 4 || strlen($nombreusuario) > 8)
		{
			throw new Exception('El nombre de usuario debe tener entre 5 y 8 caracteres');
		}
	
		if(preg_match("/\W\//", $nombreusuario) == 1)
		{
			throw new Exception('El alias de usuario solo debe tener letras, numeros y guiones bajos (_).');
		}
	
		$this->NombreUsuarioAutor = $nombreusuario;
	}
	
	public function GetIdEvento()
	{
		return $this->IdEvento;
	}
	
	public function SetIdEvento($idevento)
	{
		$this->IdEvento = $idevento;
	}
	
	public function GetFecha()
	{
		return $this->fecha;
	}
	
	public function SetFecha($fecha)
	{
		$this->fecha = $fecha;
	}
	
	public function GetTexto()
	{
		return $this->texto;
	}
	
	public function SetTexto($texto)
	{
		if(!isset($texto) || empty($texto))
		{
			throw new Exception('El texto no puede ser nulo o vacio.');
		}
		
		if(!is_string($texto) || strlen($texto) > 1000)
		{
			throw new Exception('El texto del comentario tiene un limite de 1000 caracteres');
		}
		
		$this->texto = $texto;
	}
	
	public function GetUrl()
	{
		return $this->url;
	}
	
	public function SetUrl($url)
	{
		if (isset($url) && !is_null($url)) 
		{
			if(!filter_var($url, FILTER_VALIDATE_URL))
			{
				throw new Exception('url no valida');
			}
			$this->url = $url;
		}				
    }
	
	public function GetContMeGusta()
	{
		return $this->contmegusta;
	}
	
	public function SetContMeGusta($cont)
	{
		if(!isset($cont))
		{
			throw new Exception('El contador esta vacio.');
		}
		
		if(!is_int($cont)|| $cont < 0)
		{
			throw new Exception('El contador debe ser un numero entero mayor o igual a 0.');
		}
		
		$this->contmegusta = $cont;
	}
	
	public function GetFechaSisAlta()
	{
		return $this->timestamp;
	}
	
	public function jsonSerialize()
	{
		$ArregloResultado = array();
		$ArregloResultado["id"] = $this->GetId();
	
		foreach ($this as $key => $value)
		{
			if(is_object($value))
			{
				$ArregloResultado[$key] = json_encode($value, JSON_FORCE_OBJECT | JSON_PRETTY_PRINT);
			}
			else
			{
				$ArregloResultado[$key] = $value;
			}
		}
		return $ArregloResultado;
	}
}
?>